/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rpt.bd.cenario;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Roberto
 */
public class CConectorBd {

    private CGlobal fGlobal;
    private boolean fConectado;
    private Connection fConnection = null;
    private Statement fStatement = null;

    /**
     * 
     */
    public CConectorBd(final CGlobal aGlobal) {
        super();
        fGlobal = aGlobal;
    }

    /**
     * 
     * @param aUrl
     * @param aNomeBancoDados
     * @param aUsuario
     * @param aSenha 
     */
    public CConectorBd(
            final String aUrl, final String aNomeBancoDados,
            final String aUsuario, final String aSenha) {
        super();
        fConectado = conectar(aUrl, aNomeBancoDados, aUsuario, aSenha);
    }

    /**
     * 
     * @param aUrl
     * @param aNomeBancoDados
     * @param aUsuario
     * @param aSenha
     * @return 
     */
    public boolean conectar(
            final String aUrl, final String aNomeBancoDados,
            final String aUsuario, final String aSenha) {
        String vConexao = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            if (false) {
                vConexao =
                        "jdbc:mysql://" + aUrl + "/" + aNomeBancoDados
                        + "?user=" + aUsuario
                        + "&password=" + aSenha;
                fConnection = DriverManager.getConnection(vConexao);
            } else {
                fConnection = DriverManager.getConnection("jdbc:mysql://" + aUrl + "/" + aNomeBancoDados, aUsuario, aSenha);
            }
            System.out.println("A conexão foi um sucesso\n");
            System.out.println("\n\nConsulta realizada com sucesso!!!\n");
        } catch (ClassNotFoundException e) {
            System.out.println("excessão Classe não encontrada");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("SQL Exception: Erro na conexão!");
            System.out.println(vConexao);
            e.printStackTrace();
        } finally {
            return true;
            /*
            try {
            fConn.close();
            System.out.println("\n\nFechamendo a conexão");
            } catch(SQLException erro) {
            System.out.println("Erro no fechamento");
            erro.printStackTrace();
            } 
             */
        }
    }

    /**
     * 
     * @return 
     */
    public Connection getConnection() {
        return fConnection;
    }

    /**
     * 
     * @return 
     */
    public Statement getStatement() {
        if (fStatement == null) {
            fStatement = criarStatement();
        }
        return fStatement;
    }

    /**
     * 
     * @return 
     */
    public Statement criarStatement() {
        Statement vStatement = null;
        try {
            vStatement = getConnection().createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(CConectorBd.class.getName()).log(Level.SEVERE, null, ex);
        }
        return vStatement;
    }

    /**
     * 
     * @param aQuery
     * @param fNomeClasse
     * @return 
     */
    public ResultSet execSelect(
            final String aQuery, 
            final Statement aStatement,
            final String fNomeClasse) {
        ResultSet vRs = null;
        if (aQuery != null) {
            Statement vStatement = null;
            if (aStatement == null) 
                vStatement = getStatement();
            else
                vStatement = aStatement;
            try {
                vRs = vStatement.executeQuery(aQuery);
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null,ex.getMessage());
                vRs = null;
                Logger.getLogger(fNomeClasse).log(Level.SEVERE, null, ex);
            }
        }
        return vRs;
    }

    /**
     * 
     * @param aQueryStr 
     * @return 
     */
    public int execUpdate(
            final String aQueryStr,
            final Statement aStatement,
            final boolean aApresentarDialogo, 
            final String aIdentificadorLog) {
        int vResultado = 0;
        Statement s = null;
        if (aStatement == null) 
            s = getStatement();
        else
            s = aStatement;
        if (s == null) {
            vResultado = -1;
        } else {
            try {
                s.executeUpdate(aQueryStr, Statement.RETURN_GENERATED_KEYS);
            } catch (SQLException ex) {
                vResultado = -2;
                if (fGlobal.isLogVerboso()) {
                    Logger.getLogger(aIdentificadorLog+":"+CConectorBd.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (aApresentarDialogo) {
                    //JOptionPane.showMessageDialog(null,aQueryStr+"["+ex.getMessage()+"]");
                    JOptionPane.showMessageDialog(null, "[" + ex.getMessage() + "]");
                }
            }
        }
        return vResultado;
    }
    /**
     * 
     */
}
